package de.dis2011.data;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import de.dis2011.data.DB2ConnectionManager;

public class Haus extends Immobilie
{
    private int stockwerke;
    private int kaufpreis;
    private int garten;

    public int getStockwerke()
    {
        return stockwerke;
    }

    public void setStockwerke(int stockwerke)
    {
        this.stockwerke = stockwerke;
    }

    public int getKaufpreis()
    {
        return kaufpreis;
    }

    public void setKaufpreis(int kaufpreis)
    {
        this.kaufpreis = kaufpreis;
    }

    public int getGarten()
    {
        return garten;
    }

    public void setGarten(int garten)
    {
        this.garten = garten;
    }

    /**
     * Lädt einen Haus aus der Datenbank
     * 
     * @param id
     *            ID der zu ladenden Haus
     * @return Haus-Instanz
     */
    public static Haus load(int id)
    {
        try
        {
            // Hole Verbindung
            Connection con = DB2ConnectionManager.getInstance().getConnection();

            // Erzeuge Anfrage
            String selectSQL = "SELECT * FROM haus WHERE id = ?";
            PreparedStatement pstmt = con.prepareStatement(selectSQL);
            pstmt.setInt(1, id);

            // Führe Anfrage aus
            ResultSet rs = pstmt.executeQuery();
            if (rs.next())
            {
                Haus ts = new Haus();
                ts.setId(id);
                ts.setOrt(rs.getString("ort"));
                ts.setPlz(rs.getString("plz"));
                ts.setStrasze(rs.getString("strasze"));
                ts.setHausnr(rs.getInt("hausnr"));
                ts.setFlaeche(rs.getInt("flaeche"));
                ts.setStockwerke(rs.getInt("stockwerke"));
                ts.setKaufpreis(rs.getInt("kaufpreis"));
                ts.setGarten(rs.getInt("garten"));
                ts.setVerwalter(rs.getInt("verwalter"));

                rs.close();
                pstmt.close();
                return ts;
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * Speichert den Haus in der Datenbank. Ist noch keine ID vergeben worden,
     * wird die generierte Id von DB2 geholt und dem Model übergeben.
     */
    public void save()
    {
        super.save();
        // Hole Verbindung
        Connection con = DB2ConnectionManager.getInstance().getConnection();

        try
        {

            // Achtung, hier wird noch ein Parameter mitgegeben,
            // damit später generierte IDs zurückgeliefert werden!
            String insertSQL = "INSERT INTO haus(id, ort, plz, strasze, hausnr, flaeche, stockwerke, kaufpreis, garten, verwalter) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

            PreparedStatement pstmt = con.prepareStatement(insertSQL, Statement.RETURN_GENERATED_KEYS);

            // Setze Anfrageparameter und führe Anfrage aus
            pstmt.setInt(1, getId());
            pstmt.setString(2, getOrt());
            pstmt.setString(3, getPlz());
            pstmt.setString(4, getStrasze());
            pstmt.setInt(5, getHausnr());
            pstmt.setInt(6, getFlaeche());
            pstmt.setInt(7, getStockwerke());
            pstmt.setInt(8, getKaufpreis());
            pstmt.setInt(9, getGarten());
            pstmt.setInt(10, getVerwalter());
            pstmt.executeUpdate();

            pstmt.close();

        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public void delete()
    {
        super.delete();
        // Hole Verbindung
        Connection con = DB2ConnectionManager.getInstance().getConnection();

        try
        {
            if (getId() == -1)
            {
                System.out.println("Was nicht vorhanden ist, kann nicht gelöscht werden");
            }
            else
            {
                String deleteSQL = "DELETE FROM haus WHERE id = ?";
                PreparedStatement pstmt = con.prepareStatement(deleteSQL);

                // Setze Anfrage Parameter
                pstmt.setInt(1, getId());
                pstmt.executeUpdate();

                pstmt.close();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public void edit()
    {
        super.edit();
        // Hole Verbindung
        Connection con = DB2ConnectionManager.getInstance().getConnection();

        try
        {
            if (getId() == -1)
            {
                System.out.println("Was nicht vorhanden ist, kann nicht geändert werden");
            }
            else
            {
                // Falls schon eine ID vorhanden ist, mache ein Update...
                String updateSQL = "UPDATE haus SET ort = ?, plz = ?, strasze = ?, hausnr = ?, flaeche = ?, stockwerke = ?, kaufpreis= ?, garten = ?, verwalter = ? WHERE id = ?";

                PreparedStatement pstmt = con.prepareStatement(updateSQL);

                // Setze Anfrage Parameter
                pstmt.setString(1, getOrt());
                pstmt.setString(2, getPlz());
                pstmt.setString(3, getStrasze());
                pstmt.setInt(4, getHausnr());
                pstmt.setInt(5, getFlaeche());
                pstmt.setInt(6, getStockwerke());
                pstmt.setInt(7, getKaufpreis());
                pstmt.setInt(8, getGarten());
                pstmt.setInt(9, getVerwalter());
                pstmt.setInt(10, getId());
                pstmt.executeUpdate();

                pstmt.close();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }
}
